package cn.demoncat.util.lang.entity.data;

/**
 * 队列 - 有序列表，先入先出
 * 
 * @author 延晓磊
 *
 * @since 2020年6月23日
 */
public interface Queue<E> {
	
	/**
	 * 队列满异常
	 */
	RuntimeException FULL_EX =  new RuntimeException("队列已满");
	/**
	 * 队列空异常
	 */
	RuntimeException EMPTY_EX =  new RuntimeException("队列为空");

	/**
	 * 判断队列是否为空
	 * 
	 * @return
	 * 
	 * @author 延晓磊
	 *
	 * @since 2020年6月23日
	 */
	boolean isEmpty();
	
	/**
	 * 添加数据-至队列尾
	 * 
	 * @param o 数据
	 * 
	 * @author 延晓磊
	 *
	 * @since 2020年6月23日
	 */
	void add(E o);
	
	/**
	 * 读取数据-从队列头
	 * 
	 * @return 队头数据
	 * 
	 * @throws RuntimeException 队列为空
	 * 
	 * @author 延晓磊
	 *
	 * @since 2020年6月23日
	 */
	E get();
	
	/**
	 * 队列长度
	 * 
	 * @return
	 * 
	 * @author 延晓磊
	 *
	 * @since 2020年6月23日
	 */
	int size();
	
}
